WPF加载HTML、WPF与JavaScript交互 您所在的位置:网站首页 wpf webbrowser 预加载 WPF加载HTML、WPF与JavaScript交互

WPF加载HTML、WPF与JavaScript交互

2023-09-10 14:52| 来源: 网络整理| 查看: 265

目录

一、WebBrowser加载远程网页

二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件

三、WebBrowser隐藏网页的JavaScript错误

四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键

五、WPF程序与网页JavaScript交互

六、创建服务器,提供数据接口、Script、CSS文件

一、WebBrowser加载远程网页

wbrExam.Source = new Uri("http://cnblogs.com/sntetwt");

二、WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件

Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute); Stream source = Application.GetResourceStream(uri).Stream; wbrExam.NavigateToStream(source);

三、WebBrowser隐藏网页的JavaScript错误

this.wbrExam.SuppressScriptErrors(true);

 

/// /// WebBrowser隐藏网页的JavaScript错误 /// public static class WebBrowserExtensions { public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser); if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide }); } }

四、网页屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键

//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键 window.onhelp = function(){return false} //屏蔽F1帮助 document.onkeydown = function() { if ((window.event.altKey)&& ((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ← (window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 → event.returnValue = false; return false; } /* 注:这还不是真正地屏蔽Alt+方向键,     因为Alt+方向键弹出警告框时,按住Alt键不放,     用鼠标点掉警告框,这种屏蔽方法就失效了。*/ if ((event.keyCode==8) || //屏蔽退格删除键 (event.keyCode==116) || //屏蔽 F5 刷新键 (event.ctrlKe && event.keyCode==82)) { //Ctrl + R event.keyCode=0; event.returnValue=false; } if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11 if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10 if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页 if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4 window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } }

五、WPF程序与网页JavaScript交互

public void Message(string str) { MessageBox.Show(str); } /// /// WebBrowser与JavaScript交互 /// [System.Runtime.InteropServices.ComVisible(true)] public class OprateBasic { private MainWindow instance; public OprateBasic(MainWindow instance) { this.instance = instance; } //提供给JS调用 public void HandleMessage(string p) { instance.Message(p); } } //CS调用JS private void Button_Click(object sender, RoutedEventArgs e) { this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" }); }

  

JS调用CS window.external.HandleMessage("JS调用CS");

  

//提供给CS调用 function invokeScript(args) { alert(args); }

六、创建服务器,提供数据接口、Script、CSS文件

总结:因为加载HTML文件的时候,HTML没有路径,所以加载不了JS和CSS等外部文件

创建远程站点提供数据接口和外部文件

完整的CS程序如下

using System; using System.Collections.Generic; using System.Linq; using System.IO; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Reflection; namespace WPFSctipt { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_ContentRendered(object sender, EventArgs e) { //加载远程网页 //wbrExam.Source = new Uri("http://cnblogs.com/sntetwt"); Uri uri = new Uri("pack://application:,,,/WPFSctipt;component/res/template.html", UriKind.Absolute); Stream source = Application.GetResourceStream(uri).Stream; //WebBrowser隐藏网页的JavaScript错误 this.wbrExam.SuppressScriptErrors(true); //WebBrowser与JavaScript交互 this.wbrExam.ObjectForScripting = new OprateBasic(this); //加载本地HTML文件 wbrExam.NavigateToStream(source); } public void Message(string str) { MessageBox.Show(str); } /// /// WebBrowser与JavaScript交互 /// [System.Runtime.InteropServices.ComVisible(true)] public class OprateBasic { private MainWindow instance; public OprateBasic(MainWindow instance) { this.instance = instance; } //提供给JS调用 public void HandleMessage(string p) { instance.Message(p); } } //CS调用JS private void Button_Click(object sender, RoutedEventArgs e) { this.wbrExam.InvokeScript("invokeScript", new object[] { "CS调用JS" }); } } /// /// WebBrowser隐藏网页的JavaScript错误 /// public static class WebBrowserExtensions { public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide) { FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic); if (fiComWebBrowser == null) return; object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser); if (objComWebBrowser == null) return; objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide }); } } }

  

ASMX文件代码

  

HTML代码

body{background:red;} .div{height:400px;} //屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键 document.oncontextmenu = function(){event.returnValue=false;}//屏蔽鼠标右键 window.onhelp = function(){return false} //屏蔽F1帮助 document.onkeydown = function() { if ((window.event.altKey)&& ((window.event.keyCode==37) || //屏蔽 Alt+ 方向键 ← (window.event.keyCode == 39))) { //屏蔽 Alt+ 方向键 → event.returnValue = false; return false; } /* 注:这还不是真正地屏蔽Alt+方向键, 因为Alt+方向键弹出警告框时,按住Alt键不放, 用鼠标点掉警告框,这种屏蔽方法就失效了。*/ if ((event.keyCode==8) || //屏蔽退格删除键 (event.keyCode==116) || //屏蔽 F5 刷新键 (event.ctrlKe && event.keyCode==82)) { //Ctrl + R event.keyCode=0; event.returnValue=false; } if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11 if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽Ctrl+n if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽shift+F10 if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽shift加鼠标左键新开一网页 if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4 window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } } $(function () { $("div").text("JavaScript被执行"); window.external.HandleMessage("JS调用CS"); }) function invokeScript(args) { alert(args); }

  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有